//////////////////////////////////////////////////////////////////////////
#pragma once


namespace Math
{
	template<>
	struct Constants< float >
	{
		static const float	Pi()				{return 3.14159265358979323846f;}
		static const float	TwoPi()				{return 6.28318530717958623200f;}
		static const float	HalfPi()			{return 1.57079632679489655800f;}
		static const float	QuarterPi()			{return 0.78539816339744827900f;}
		static const float	OneOverPi()			{return 0.31830988618379069122f;}
		static const float	SqrtPi()			{return 1.77245385090551588192f;}
		static const float	SqrtTwoPi()			{return 2.50662827463100024161f;}
		static const float	SqrtTwo()			{return 1.41421356237309514547f;}
		static const float	SqrtThree()			{return 1.73205080756887719318f;}
		static const float	SqrtTen()			{return 3.16227766016837952279f;}
		static const float	SqrtE()				{return 1.64872127070012819416f;}
		static const float	SqrtHalf()			{return 0.70710678118654757274f;}
		static const float	SqrtLn2()			{return 0.83255461115769768821f;}
		static const float	E()					{return 2.71828182845904553488f;}
		static const float	Golden()			{return 1.61803398874989490253f;}
		static const float	Ln10()				{return 2.30258509299404590109f;}
		static const float	Ln2()				{return 0.69314718055994528623f;}
		static const float	Log10E()			{return 0.43429448190325187218f;}
		static const float	Log2E()				{return 1.44269504088896338700f;}
		static const float	LogP5()				{return -0.693147f;}
		static const float	C()					{return 299792458.0f;}
		static const float	DegToRad()			{return Pi() / 180.0f;}
		static const float	RadToDeg()			{return 180.0f / Pi();}
	};


	template<>
	struct Constants< double >
	{
		static const double	Pi()				{return 3.14159265358979323846;}
		static const double	TwoPi()				{return 6.28318530717958623200;}
		static const double	HalfPi()			{return 1.57079632679489655800;}
		static const double	QuarterPi()			{return 0.78539816339744827900;}
		static const double	OneOverPi()			{return 0.31830988618379069122;}
		static const double	SqrtPi()			{return 1.77245385090551588192;}
		static const double	SqrtTwoPi()			{return 2.50662827463100024161;}
		static const double	SqrtTwo()			{return 1.41421356237309514547;}
		static const double	SqrtThree()			{return 1.73205080756887719318;}
		static const double	SqrtTen()			{return 3.16227766016837952279;}
		static const double	SqrtE()				{return 1.64872127070012819416;}
		static const double	SqrtHalf()			{return 0.70710678118654757274;}
		static const double	SqrtLn2()			{return 0.83255461115769768821;}
		static const double	E()					{return 2.71828182845904553488;}
		static const double	Golden()			{return 1.61803398874989490253;}
		static const double	Ln10()				{return 2.30258509299404590109;}
		static const double	Ln2()				{return 0.69314718055994528623;}
		static const double	Log10E()			{return 0.43429448190325187218;}
		static const double	Log2E()				{return 1.44269504088896338700;}
		static const double	LogP5()				{return -0.693147;}
		static const double	C()					{return 299792458.0;}
		static const double	DegToRad()			{return Pi() / 180.0;}
		static const double	RadToDeg()			{return 180.0 / Pi();}
	};
}
